package top.yuanao.im.util;

import com.alibaba.fastjson.JSONObject;
import top.yuanao.im.entity.IMUser;

import javax.websocket.Session;
import java.io.IOException;
import java.util.*;

/**
 * IMUser相关的工具类
 *
 * @user Yuanao
 * @CreateDate 2021/10/21 18:02
 */
public class SocketUtils {
    //用户池,用于存储已经连接的WebSocket链接 封装的IMUser对象
    private static Set<IMUser> users = new TreeSet<>();

    /**
     * 获取所有的已经连接的用户
     * @return 将set返回
     */
    public static Set<IMUser> getUsers() {
        return users;
    }

    /**
     * 添加用户到集合中
     * @param user 新的封装过的IMUser对象
     */
    public static void addUser(IMUser user) {
        //当前的session在集合中没有时添加
        users.add(user);
    }


    /**
     * 删除指定元素
     * @param user 待删除的元素
     */
    public static void removeUser(IMUser user) {
        //当前的session在集合中没有时添加
        users.remove(user);
    }

    /**
     * 根据给的session获取user对象
     * @param session webSocket的Session对象
     * @return 返回IMUser对象,如果没有找到返回null
     */
    public static IMUser getUserBySession(Session session) {
        IMUser imUser = null;
        for (IMUser user : getUsers()) {
            if (user.getSession().equals(session)) {
                imUser = user;
                break;
            }
        }
        return imUser;
    }

    /**
     * 向所有用户发送消息
     * @param json 发送到客户端的json字符串
     * @return 返回发送出去的个数
     */
    public static int sendAllUser(String json) {
        int count = 0;
        for (IMUser user : getUsers()) {
            try {
                user.getSession().getBasicRemote().sendText(json);
            } catch (IOException e) {
                e.printStackTrace();
            }
            count++;    //记录发送的个数
        }
        return count;
    }


    /**
     * 返回当前所有在线的网名
     *
     * @return 返回在线名集合
     */
    public static List<String> getAllUserName() {
        ArrayList<String> list = new ArrayList<>();
        for (IMUser user : getUsers()) {
            list.add(user.getName());
        }
        return list;
    }

    /**
     * 返回当前在线人数
     *
     * @return int 当前在线人数
     */
    public static int getCurrentUserCount() {
        return users.size();
    }



}
